overview.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { FeatureFlagContext, useFlag, useParams } from 'common'
  2. import { useRouter } from 'next/router'
  3. import { useContext, useEffect } from 'react'
  4. import { PageContainer } from 'ui-patterns/PageContainer'
  5. import {
  6. PageHeader,
  7. PageHeaderAside,
  8. PageHeaderMeta,
  9. PageHeaderSummary,
  10. PageHeaderTitle,
  11. } from 'ui-patterns/PageHeader'
  12. import { OverviewLearnMore } from '@/components/interfaces/Auth/Overview/OverviewLearnMore'
  13. import { OverviewMetrics } from '@/components/interfaces/Auth/Overview/OverviewMetrics'
  14. import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout'
  15. import DefaultLayout from '@/components/layouts/DefaultLayout'
  16. import { DocsButton } from '@/components/ui/DocsButton'
  17. import { useAuthOverviewQuery } from '@/data/auth/auth-overview-query'
  18. import { DOCS_URL } from '@/lib/constants'
  19. import { NextPageWithLayout } from '@/types'
  20. const AuthOverview: NextPageWithLayout = () => {
  21. const router = useRouter()
  22. const { ref } = useParams()
  23. const { hasLoaded } = useContext(FeatureFlagContext)
  24. const authOverviewPageEnabled = useFlag('authOverviewPage')
  25. const {
  26. data: metrics,
  27. isPending: isLoading,
  28. error,
  29. } = useAuthOverviewQuery({ projectRef: ref }, { enabled: !!ref })
  30. useEffect(() => {
  31. if (hasLoaded && !authOverviewPageEnabled) {
  32. router.replace(`/project/${ref}/auth/users`)
  33. }
  34. // eslint-disable-next-line react-hooks/exhaustive-deps
  35. }, [authOverviewPageEnabled, router, ref])
  36. if (!authOverviewPageEnabled) {
  37. return null
  38. }
  39. return (
  40. <>
  41. <PageHeader size="large">
  42. <PageHeaderMeta>
  43. <PageHeaderSummary>
  44. <PageHeaderTitle>Overview</PageHeaderTitle>
  45. </PageHeaderSummary>
  46. <PageHeaderAside>
  47. <div className="flex items-center gap-2">
  48. <span className="text-sm text-foreground-light">
  49. <span className="text-foreground">Last 24 hours</span>
  50. </span>
  51. <DocsButton href={`${DOCS_URL}/guides/auth`} />
  52. </div>
  53. </PageHeaderAside>
  54. </PageHeaderMeta>
  55. </PageHeader>
  56. <PageContainer size="large">
  57. <OverviewMetrics metrics={metrics} isLoading={isLoading} error={error} />
  58. <OverviewLearnMore />
  59. </PageContainer>
  60. </>
  61. )
  62. }
  63. AuthOverview.getLayout = (page) => (
  64. <DefaultLayout>
  65. <AuthLayout title="Overview">{page}</AuthLayout>
  66. </DefaultLayout>
  67. )
  68. export default AuthOverview